#!/bin/bash
# MVP范围到Function-Chart流程连接器
# 用途：将03步骤的MVP范围输出转换为function-chart的技术设计输入

set -euo pipefail

# 配置
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly PLAN_DIR="$(dirname "$SCRIPT_DIR")"
readonly FUNCTION_CHART_DIR="$(dirname "$PLAN_DIR")/function-chart"
readonly MVP_FILE="$PLAN_DIR/03_MVP范围与商业模式.md"
readonly FUNCTION_PROMPT="$FUNCTION_CHART_DIR/function-design-prompt.md"

# 颜色输出
color() {
  local color_code="$1"; shift
  echo -e "\033[${color_code}m$*\033[0m"
}

info() { color "32" "[INFO] $*"; }
warn() { color "33" "[WARN] $*"; }
error() { color "31" "[ERROR] $*"; }

# 显示帮助
show_help() {
cat << 'EOF'
MVP范围到Function-Chart流程连接器

用途：
  将03步骤的MVP范围定义转换为function-chart的技术设计输入

使用方法：
  ./mvp-to-function-chart.sh [选项]

选项：
  -f, --function NAME     指定要设计的功能名称
  -o, --output DIR        输出目录 (默认: function-designs)
  -d, --dryrun           预览模式，不生成文件
  -v, --verbose          详细输出
  -h, --help             显示帮助

示例：
  # 为"用户注册"功能生成技术设计
  ./mvp-to-function-chart.sh -f "用户注册功能"
  
  # 批量处理所有Must功能
  ./mvp-to-function-chart.sh --batch-must
  
  # 预览模式
  ./mvp-to-function-chart.sh -f "用户登录" -d
EOF
}

# 解析MVP文件，提取Must功能列表
extract_must_functions() {
  if [[ ! -f "$MVP_FILE" ]]; then
    error "MVP文件不存在: $MVP_FILE"
    return 1
  fi
  
  # 提取Must功能（简单的文本解析）
  grep -A 10 "Must：" "$MVP_FILE" | grep -E "^- " | sed 's/^- //' || true
}

# 生成function-chart输入
generate_function_input() {
  local function_name="$1"
  local output_dir="$2"
  local dryrun="${3:-0}"
  
  info "处理功能: $function_name"
  
  # 创建输出目录
  if [[ "$dryrun" != "1" ]]; then
    mkdir -p "$output_dir"
  fi
  
  # 生成提示词输入
  local input_file="$output_dir/${function_name}_input.md"
  local output_file="$output_dir/${function_name}_design.md"
  
  # 构建输入内容
  local input_content
  input_content=$(cat << EOF
# 功能设计输入

## 功能名称
$function_name

## 来源
从MVP范围定义（03步骤）中的Must功能提取

## 业务背景
$(grep -A 5 "问题（Problem）" "$MVP_FILE" 2>/dev/null | tail -n +2 || echo "请从01步骤补充问题描述")

## 用户场景
$(grep -A 5 "目标（Goal）" "$MVP_FILE" 2>/dev/null | tail -n +2 || echo "请从01步骤补充目标描述")

## 功能要求
- 符合MVP原则：最短闭环，输入-处理-输出-结果
- 优先考虑"人肉"或第三方替代方案
- 支持商业模式：$(grep -A 3 "定价：" "$MVP_FILE" | head -1 | sed 's/- //')

## 技术约束
- 2周内可交付
- 单机优先/低成本
- 可回滚策略

## 下一步
使用function-chart提示词生成详细的技术实现方案
EOF
)
  
  if [[ "$dryrun" == "1" ]]; then
    color "36" "=== 预览: $input_file ==="
    echo "$input_content"
    color "36" "=== 预览结束 ==="
    echo
  else
    echo "$input_content" > "$input_file"
    info "已生成输入文件: $input_file"
    
    # 提示下一步操作
    cat << EOF

📋 下一步操作：
1. 查看输入文件: $input_file
2. 使用AI工具配合function-chart提示词生成技术设计
3. 输出将保存到: $output_file

💡 AI提示词示例：
请根据以下功能需求，使用function-chart模板生成完整的技术实现方案：

[将 $input_file 的内容粘贴到这里]

参考模板：$FUNCTION_PROMPT
EOF
  fi
}

# 批量处理Must功能
batch_process_must() {
  local output_dir="$1"
  local dryrun="${2:-0}"
  
  info "批量处理Must功能..."
  
  local must_functions
  must_functions=$(extract_must_functions)
  
  if [[ -z "$must_functions" ]]; then
    warn "未找到Must功能列表，请检查MVP文件格式"
    return 1
  fi
  
  info "发现Must功能："
  echo "$must_functions" | while read -r func; do
    echo "  - $func"
  done
  
  echo "$must_functions" | while read -r func; do
    [[ -n "$func" ]] && generate_function_input "$func" "$output_dir" "$dryrun"
  done
}

# 主函数
main() {
  local function_name=""
  local output_dir="function-designs"
  local dryrun=0
  local verbose=0
  local batch_must=0
  
  # 解析参数
  while [[ $# -gt 0 ]]; do
    case $1 in
      -f|--function)
        function_name="$2"
        shift 2
        ;;
      -o|--output)
        output_dir="$2"
        shift 2
        ;;
      -d|--dryrun)
        dryrun=1
        shift
        ;;
      -v|--verbose)
        verbose=1
        shift
        ;;
      --batch-must)
        batch_must=1
        shift
        ;;
      -h|--help)
        show_help
        exit 0
        ;;
      *)
        error "未知参数: $1"
        show_help
        exit 1
        ;;
    esac
  done
  
  # 检查必要文件
  if [[ ! -f "$MVP_FILE" ]]; then
    error "MVP文件不存在: $MVP_FILE"
    error "请先完成03步骤：MVP范围与商业模式定义"
    exit 1
  fi
  
  if [[ ! -f "$FUNCTION_PROMPT" ]]; then
    error "Function-chart提示词文件不存在: $FUNCTION_PROMPT"
    exit 1
  fi
  
  # 执行操作
  if [[ "$batch_must" == "1" ]]; then
    batch_process_must "$output_dir" "$dryrun"
  elif [[ -n "$function_name" ]]; then
    generate_function_input "$function_name" "$output_dir" "$dryrun"
  else
    error "请指定功能名称 (-f) 或使用批量模式 (--batch-must)"
    show_help
    exit 1
  fi
  
  info "处理完成！"
}

# 执行主函数
main "$@"
